package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

/*
    库管类
        1.核心职责是管理我们的数据仓库-- 数组: 增删改查
        2.这里的所有方法【功能】都是给业务员用
 */
public class StudentDao implements BaseStudentDao{

    //1. 定义一个长度为5的数组,作为整个系统的数据容器
    private static Student[] stus = new Student[5];

    //静态代码块: 在系统进行类加载时就往容器中初始化两个写死的学生对象
    static {
        System.out.println("---------------loading--------------------");
        //后期要改成加载配置文件,还原之前存档的真实数据!
        Student stu1 = new Student("heima001","柳岩","36","1999-11-11");
        Student stu2 = new Student("heima002","杨幂","35","1999-11-11");

        stus[0] = stu1;
        stus[1] = stu2;
    }


    //库管类中的添加功能
    public boolean addStudent(Student stu) {

        //2. 通过标记位思想来找到当前stu对象在数组中应存入的位置
        //2.1 假设数组已经存满了,让index记录-1
        int index = -1;

        //2.2 遍历数组
        for (int i = 0; i < stus.length; i++) {
            //2.3 拿到每一个索引位置的元素
            Student student = stus[i];
            //2.4 判断当前元素是否为null
            if (student == null){
                //2.5 修改标记,让index记录当前元素的索引位置
                index = i;
                break;
            }
        }

        //3. 根据index的值来判断本次添加是否能成功
        if (index == -1){
            //3.1 -1表示都存满了,没有办法再添加了,返回false
            return false;
        }else {
            //3.2 不是-1表示还有位置可以存,将要添加的学生对象存入对应的索引位置即可
            stus[index] = stu;
            return true;
        }
    }

    //库管类中的查询功能
    public Student[] findAllStudents() {
        return stus;
    }

    //库管类中的删除功能
    public void deleteStudentId(String delId) {
        //1. 找到当前要删除的学号对应的学生对象在数组容器中索引位置
        int index = getIndex(delId);
        //2. 用null去覆盖掉该索引位置的学生对象,从而达到删除效果
        stus[index] = null;
    }

    //库管类中的修改功能
    public void updateStudentById(String updateId, Student newStu) {
        //1. 通过要修改的学号查找对应学生对象在数组容器中的索引位置
        int index = getIndex(updateId);
        //2. 将newStu去覆盖掉该索引位置的旧对象,从而达到修改效果
        stus[index] = newStu;
    }

    //根据学号查找对应学生对象在数组容器中的索引位置
    public int getIndex(String id){
        //1. 先假设要查找的学号不存在,index先记录-1
        int index = -1;
        //2. 遍历数组容器
        for (int i = 0; i < stus.length; i++) {
            //2.1 拿到每一个学生对象
            Student stu = stus[i];
            //2.2 判断当前学生对象的学号和要查找的学号是否相同
            if (stu != null && stu.getSid().equals(id)){
                //相同,则说明要查找的学号存在,则修改标记为当前学生对象的索引
                index = i;
                break;
            }
        }

        //3. 返回index即可
        return index;
    }


}
